package com.example.mybatisdemo.domain.returns;

import lombok.Data;

import java.io.Serializable;

@Data
public class RespEntity<T> implements Serializable {

    /**
     * 返回码
     */
    private Integer code;
    /**
     * 错误信息
     */
    private String message;
    /**
     * 返回对象
     */
    private T data;

    /**
     * 成功
     * @param <T> T
     * @return  返回
     */
    public static<T> RespEntity<T> success() {
        return resultData(RespCode.SUCCESS.getCode(), RespCode.SUCCESS.getMessage(), null);
    }

    /**
     * 默认成功 返回数据
     * @param  data  data
     * @return  返回
     */
    public static<T> RespEntity<T> success(T data) {
        return resultData(RespCode.SUCCESS.getCode(), RespCode.SUCCESS.getMessage(), data);
    }

    /**
     * 默认失败
     * @param <T> T
     * @return 返回
     */
    public static<T> RespEntity<T> dataFail() {
        return resultData(RespCode.DATA_ERROR.getCode(), RespCode.DATA_ERROR.getMessage(), null);
    }

    /**
     * 默认失败 返回错误数据
     * @param data data
     * @return 返回
     */
    public static<T> RespEntity<T> dataFail(T data) {
        return resultData(RespCode.DATA_ERROR.getCode(), RespCode.DATA_ERROR.getMessage(), data);
    }

    /**
     * 默认失败 返回错误码 和错误信息
     * @param rc  错误
     * @return  返回
     */
    public static<T> RespEntity<T> fail(RespCode rc) {
        return resultData(rc.getCode(), rc.getMessage(), null);
    }
    /**
     * @date 2020/12/5 2:53 下午
     * @param rc, msg
     * @return com.jd.icity.standard.base.returns.RespEntity<T>
     **/
    public static<T> RespEntity<T> fail(RespCode rc,String msg) {
        return resultData(rc.getCode(), msg, null);
    }

    /**
     * 默认失败 系统错误
     * @param <T>  null
     * @return  返回
     */
    public static<T> RespEntity<T> serverFail() {
        return resultData(RespCode.SERVER_ERROR.getCode(), RespCode.SERVER_ERROR.getMessage(), null);
    }

    /**
     * 默认失败 系统错误信息
     * @param msg  错误信息
     * @param <T>  null
     * @return  返回
     */
    public static<T> RespEntity<T> serverFail(String msg) {
        return resultData(RespCode.SERVER_ERROR.getCode(), msg, null);
    }


    public static<T> RespEntity<T> resultData(Integer code, String msg,T data) {
        RespEntity<T> respEntity = new  RespEntity<>();
        respEntity.setCode(code);
        respEntity.setMessage(msg);
        respEntity.setData(data);
        return respEntity;
    }

}
